package com.titaniume.java;

import sun.awt.windows.ThemeReader;

/**
 * @program: JavaSenior
 * @description: 测试Thread类的常用方法
 *
 * 1.start(): 启动当前线程；调用当前线程的run()方法
 * 2.run(): 通常需要重写Thread类的此方法，将创建线程要执行的操作声明在此方法中
 * 3.currentThread(): 静态方法 ，返回当前代码的线程
 * 4.getName() ：获取当前线程的名字
 * 5.setName() : 设置当前线程的名字
 * 6.yield(): 释放当前cpu的执行权
 * 7. join(): 线程a中调用线程b的join()方法 ，此时线程a就进入阻塞状态，直到线程b完全执行以后，
 *  线程a才结束阻塞状态
 * 8.stop():  已过时 当执行此方法时 ，强制结束当前线程
 * 9.sleep(long millis):让当前现场 睡眠 指定的millis毫秒 。 在指定的millis毫秒时间内
 * 当前现场是阻塞状态
 * 10.isAlive():判断当前线程是否存活
 *
 *
 *
 * 线程优先级
 * MAX_PRIORITY
 * MIN_PRIORITY
 * NORM_PRIORITY --->默认优先级
 *
 * 2.如何获取设置当前线程的优先级：
 *
 * getPriority():获取当前线程的优先级
 * setPriority(int newPriority): 设置当前线程的优先级
 *
 * 说明: 高优先级线程要抢占低优先级线程cpu的执行权.但是只是从概率上讲,高概率的线程高概率的情况下
 * 被执行,并不意味着高优先级的线程执行完以后 ,低优先级的线程才执行
 *
 *
 * @author: renfei.huang
 * @create: 2021-09-28 21:06
 */
public class ThreadMethodTest {

    public static void main(String[] args) {

        //构造方法设置线程名称
        HelloTread helloTread = new HelloTread("Thread: 1");
        //set  线程名称
//        helloTread.setName("线程一");


        //设置分线程的优先级
        helloTread.setPriority(Thread.MAX_PRIORITY);
        helloTread.start();


        //给主线程命名
        Thread.currentThread().setName("主线程");
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        for (int i = 0; i < 100 ; i++) {
            if(i % 2 == 0){


                System.out.println(Thread.currentThread().getName()+ ":"+ i+ ":"+ Thread.currentThread().getPriority());
            }

//            if(i == 20){
//                try {
//                    helloTread.join();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
        }
        System.out.println("helloTread.isAlive() = " + helloTread.isAlive());

    }

}


class HelloTread extends  Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100 ; i++) {
            if(i % 2 == 0){

//                try {
//                    sleep(10);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }

                System.out.println(Thread.currentThread().getName()+ ":"+ i+":"+Thread.currentThread().getPriority());
            }

//            if(i % 20 == 0){
//                this.yield();
//            }
        }
    }

    public  HelloTread(String name){
        super(name);
    }
}
